package lyl.my;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;

/**
 * 任务混部
 * 题目描述
 * 公司创新实验室正在研究如何最小化资源成本，最大化资源利用率，请你设计算法帮他们
 * 解决一个任务混部问题：有 taskNum 项任务，每个任务有开始时间（startTime
 * ），结束时间（endTime），并行度(parallelism)三个属性，并行度是指这个任务运行时将
 * 会占用的服务器数量，一个服务器在每个时刻可以被任意任务使用但最多被一个任务占用
 * ，任务运行完会立即释放（结束时刻不占用）。任务混部问题是指给定一批任务，让这批
 * 任务由同一批服务器承载运行，请你计算完成这批任务混部最少需要多少服务器，从而最
 * 大化控制资源成本。 输入描述
 * 第一行输入为 taskNum，表示有 taskNum 项任务
 * 接下来 taskNum 行，每行三个整数，表示每个任务的开始时间（startTime
 * ），结束时间（endTime），并行度(parallelism)
 * 3
 * 2 3 1
 * 6 9 2
 * 0 5 1
 *
 * 输出描述
 * 一个整数，表示最少需要的服务器数量
 * 2
 */
public class MixTask {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        Integer[][] ranges = new Integer[n][3];
        for (int i = 0; i < n; i++) {
            ranges[i][0] = sc.nextInt();
            ranges[i][1] = sc.nextInt();
            ranges[i][2] = sc.nextInt();

        }
        //所有临界点时间，只有临界点时间才能跑服务
        List<Integer> timeList = new ArrayList<>();

        for (int i = 0; i < ranges.length; i++) {
            timeList.add(ranges[i][0]);
            timeList.add(ranges[i][1]);
        }
        Collections.sort(timeList);

        int max = 0;

        for (Integer integer : timeList) {
            int temp = 0;
            for (Integer[] range : ranges) {

                //依次判断服务是否是当前时刻跑的，是就加上线程数
                if (range[0] <= integer && range[1] >= integer) {
                    temp += range[2];
                }
                max = Math.max(temp, max);
            }
        }


        System.out.println(max);
    }
}
